package ru.evstpet.kubejob.controller;

import java.util.List;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import ru.evstpet.kubejob.entity.Person;
import ru.evstpet.kubejob.repository.PersonRepository;

@RequiredArgsConstructor
@RestController
public class PersonController {

    private final PersonRepository repository;

    @Operation(summary = "Получение всех пользователей")
    @GetMapping
    public List<Person> getTest() {
        return repository.getAll();
    }

    @Operation(summary = "Получение пользователя по ID")
    @GetMapping("/get/{id}")
    public Person get(@PathVariable Long id) {
        return repository.get(id);
    }

    @Operation(summary = "Добавление нового пользователя")
    @PostMapping("/add")
    public ResponseEntity<Person> create(@RequestBody Person person) {
        if (person == null) {
            return ResponseEntity.badRequest().build();
        }

        return ResponseEntity.ok(repository.create(person));
    }

    @Operation(summary = "Обновление пользователя")
    @PutMapping("/update")
    public ResponseEntity<Person> update(@RequestBody Person person) {
        if (person == null) {
            return ResponseEntity.badRequest().build();
        }

        return ResponseEntity.ok(repository.update(person));
    }

    @Operation(summary = "Удаление пользователя")
    @DeleteMapping("/delete/{id}")
    public ResponseEntity<Void> delete(@PathVariable Long id) {
        repository.delete(id);

        return ResponseEntity.noContent().build();
    }

}
